/**
 * 数据库初始化脚本
 * 读取init.sql文件并执行SQL语句以初始化数据库
 */
const fs = require('fs');
const path = require('path');
const mysql = require('mysql2/promise');
const dotenv = require('dotenv');

// 加载环境变量
const envFile = process.env.NODE_ENV === 'production'
  ? '.env.production'
  : process.env.NODE_ENV === 'test'
    ? '.env.test'
    : '.env.development';

try {
  dotenv.config({
    path: path.resolve(__dirname, '..', envFile)
  });
} catch (error) {
  console.warn(`警告: 找不到 ${envFile} 文件, 将使用默认设置`);
}

// 数据库配置
const dbConfig = {
  host: process.env.DB_HOST || 'localhost',
  port: parseInt(process.env.DB_PORT || '3306', 10),
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || 'root',
  multipleStatements: true // 允许执行多条SQL语句
};

// SQL文件路径
const sqlFilePath = path.join(__dirname, '..', 'config', 'init.sql');

async function initializeDatabase() {
  console.log('开始初始化数据库...');
  
  try {
    // 读取SQL文件
    const sqlContent = fs.readFileSync(sqlFilePath, 'utf8');
    console.log(`成功读取SQL文件: ${sqlFilePath}`);
    
    // 创建数据库连接
    console.log('正在连接到MySQL服务器...');
    const connection = await mysql.createConnection({
      host: dbConfig.host,
      port: dbConfig.port,
      user: dbConfig.user,
      password: dbConfig.password,
      multipleStatements: true
    });
    
    console.log('已连接到MySQL服务器');
    
    // 执行SQL语句
    console.log('正在执行SQL语句...');
    await connection.query(sqlContent);
    
    console.log('数据库初始化成功!');
    
    // 关闭连接
    await connection.end();
    console.log('数据库连接已关闭');
    
  } catch (error) {
    console.error('数据库初始化失败:', error);
    process.exit(1);
  }
}

// 执行初始化
initializeDatabase();
